/*
    FreeSpace.c (DiskInfo())

    This routine returns the free space on each device (also RAM:)
    in bytes. If it does return a negative value an error was occured
    (ie. disk not validated,...).

*/


extern APTR mempool;


LONG DiskInfo( STRPTR diskname )
{
   LONG freedisk;
   DiskData *dd;
   
   if( Strnicmp( diskname, "RAM:", 4) )
     {
        if( (dd = AllocMemH(mempool, sizeof(struct InfoData))) )
          {
             if( (dd->lock = Lock( diskname, SHARED_LOCK )) )
               {
                  Info( dd->lock, dd->id );
                  UnLock( dd->lock );
                  
                  if( dd->id->id_DiskState == ID_VALIDATED )
                       freedisk = (dd->id->id_NumBlocks - dd->id->id_NumBlocksUsed) * dd->id->id_BytesPerBlock;
                  else
                      freedisk = -dd->id->id_DiskState;
               }
             else
                  freedisk = -1;
             FreeMemH( dd ); 
          }
        else
             freedisk = -2;
     }
   else
        freedisk = AvailMem( MEMF_ANY );
        
   return freedisk;
}